home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / intuisup.lha / Intuisup / source.lha / Pointer / pointer_test.c < prev    next >
C/C++ Source or Header  |  1992-07-28  |  6KB  |  209 lines

  1. /* $Revision Header *** Header built automatically - do not edit! ***********
  2.  *
  3.  *    (C) Copyright 1992 by Torsten Jürgeleit
  4.  *
  5.  *    Name .....: pointer_test.c
  6.  *    Created ..: Thursday 09-Jan-92 00:26:55
  7.  *    Revision .: 1
  8.  *
  9.  *    Date        Author                 Comment
  10.  *    =========   ====================   ====================
  11.  *    11-Jul-92   Torsten Jürgeleit      now get pointer to console device
  12.  *    09-Jan-92   Torsten Jürgeleit      Created this file!
  13.  *
  14.  ****************************************************************************
  15.  *
  16.  *    Test for mouse pointer functions
  17.  *
  18.  * $Revision Header ********************************************************/
  19.  
  20.     /* Includes */
  21.  
  22. #include <exec/types.h>
  23. #ifdef AZTEC_C
  24. #include <functions.h>   /* needed for Aztec C - prototypes and pragmas for all Amiga system functions */
  25. #endif
  26. #include <libraries/memwatch.h>   /* header file for memory debug link library (Fish 240) - AFTER functions.h */
  27. #include "/render/render.h"
  28. #include "/gadgets/gadgets.h"
  29. #include "pointer.h"
  30.  
  31.     /* Defines */
  32.  
  33. #define WINDOW_WIDTH        600
  34. #define WINDOW_HEIGHT        180
  35. #define WINDOW_IDCMP        (CLOSEWINDOW | GADGET_IDCMP_FLAGS_BUTTON)
  36. #define WINDOW_FLAGS        (WINDOWCLOSE | WINDOWDRAG | WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH | RMBTRAP | ACTIVATE)
  37. #define WINDOW_TITLE        (UBYTE *)" Mouse pointer test "
  38.  
  39. #define RENDER_INFO_FLAGS    (USHORT)(RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
  40. #define OPEN_WINDOW_FLAGS    (USHORT)(OPEN_WINDOW_FLAG_CENTER_SCREEN | OPEN_WINDOW_FLAG_RENDER_PENS)
  41.  
  42. #define CLOSE_GADGET_X    16
  43. #define CLOSE_GADGET_Y    5
  44.  
  45.     /* Globals */
  46.  
  47. struct IntuitionBase  *IntuitionBase;
  48. struct GfxBase        *GfxBase;
  49. struct Library        *DiskfontBase;
  50. struct Library        *LayersBase;
  51. struct Device         *ConsoleDevice;
  52.  
  53.     /* Statics */
  54.  
  55. STATIC struct NewWindow  test_new_window = {
  56.    0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0, 0, WINDOW_IDCMP, WINDOW_FLAGS,
  57.    NULL, NULL, WINDOW_TITLE, NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN
  58. };
  59. STATIC struct TextAttr  topaz80_attr = { (STRPTR)"topaz.font", TOPAZ_EIGHTY,
  60.                            FS_NORMAL, FPF_ROMFONT },
  61.             topaz60_attr = { (STRPTR)"topaz.font", TOPAZ_SIXTY,
  62.                            FS_NORMAL, FPF_ROMFONT };
  63.     /* Defines for test gadgets */
  64.  
  65. #define TEST_GADGET_MOVE_POINTER    0
  66. #define TEST_GADGET_BUSY_POINTER    1
  67.  
  68. #define TEST_GADGET1_TYPE        GADGET_DATA_TYPE_BUTTON
  69. #define TEST_GADGET1_FLAGS        GADGET_DATA_FLAG_HOTKEY
  70. #define TEST_GADGET1_LEFT_EDGE        ((WINDOW_WIDTH / 2 - TEST_GADGET1_WIDTH) / 2)
  71. #define TEST_GADGET1_TOP_EDGE        ((WINDOW_HEIGHT - TEST_GADGET1_HEIGHT) / 2)
  72. #define TEST_GADGET1_WIDTH        ((12 + 2) * 10)
  73. #define TEST_GADGET1_HEIGHT        19
  74. #define TEST_GADGET1_TEXT        "_Move pointer"
  75. #define TEST_GADGET1_TEXT_ATTR        &topaz60_attr
  76.  
  77. #define TEST_GADGET2_TYPE        GADGET_DATA_TYPE_BUTTON
  78. #define TEST_GADGET2_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
  79. #define TEST_GADGET2_LEFT_EDGE        (WINDOW_WIDTH - (TEST_GADGET2_WIDTH + TEST_GADGET1_LEFT_EDGE))
  80. #define TEST_GADGET2_TOP_EDGE        TEST_GADGET1_TOP_EDGE
  81. #define TEST_GADGET2_WIDTH        TEST_GADGET1_WIDTH
  82. #define TEST_GADGET2_HEIGHT        TEST_GADGET1_HEIGHT
  83. #define TEST_GADGET2_TEXT        "_Busy pointer"
  84. #define TEST_GADGET2_TEXT_ATTR        TEST_GADGET1_TEXT_ATTR
  85.  
  86. STATIC struct GadgetData  test_gadget_data[] = {
  87.    {
  88.     TEST_GADGET1_TYPE,        /* gd_Type */
  89.     TEST_GADGET1_FLAGS,        /* gd_Flags */
  90.     TEST_GADGET1_LEFT_EDGE,        /* gd_LeftEdge */
  91.     TEST_GADGET1_TOP_EDGE,        /* gd_TopEdge */
  92.     TEST_GADGET1_WIDTH,        /* gd_Width */
  93.     TEST_GADGET1_HEIGHT,        /* gd_Height */
  94.     TEST_GADGET1_TEXT,        /* *gd_Text */
  95.     TEST_GADGET1_TEXT_ATTR,        /* *gd_TextAttr */
  96.     { 0, 0, 0 }
  97.    }, {
  98.     TEST_GADGET2_TYPE,        /* gd_Type */
  99.     TEST_GADGET2_FLAGS,        /* gd_Flags */
  100.     TEST_GADGET2_LEFT_EDGE,        /* gd_LeftEdge */
  101.     TEST_GADGET2_TOP_EDGE,        /* gd_TopEdge */
  102.     TEST_GADGET2_WIDTH,        /* gd_Width */
  103.     TEST_GADGET2_HEIGHT,        /* gd_Height */
  104.     TEST_GADGET2_TEXT,        /* *gd_Text */
  105.     TEST_GADGET2_TEXT_ATTR,        /* *gd_TextAttr */
  106.     { 0, 0, 0 }
  107.    }, {
  108.     INTUISUP_DATA_END        /* mark end of gadget data array */
  109.    }
  110. };
  111.     /* Prototypes */
  112.  
  113. VOID test_action(struct RenderInfo  *ri, struct Window  *win,
  114.                             struct GadgetList  *gl);
  115.     /* Pragmas */
  116.  
  117. #pragma regcall(test_action(a0,a1,a2))
  118.  
  119.     /* Mouse pointer test */
  120.  
  121.    LONG
  122. main(VOID)
  123. {
  124.    struct IOStdReq    io;
  125.    struct RenderInfo  *ri;
  126.    struct Window      *win;
  127.    struct GadgetList  *gl;
  128.  
  129.    MWInit((BPTR)NULL, 0L);
  130.    if (IntuitionBase = OpenLibrary("intuition.library", 0L)) {
  131.       if (GfxBase = OpenLibrary("graphics.library", 0L)) {
  132.      if (DiskfontBase = OpenLibrary("diskfont.library", 0L)) {
  133.         if (LayersBase = OpenLibrary("layers.library", 0L)) {
  134.            if (!OpenDevice("console.device", -1L,
  135.                          (struct IORequest *)&io, 0L)) {
  136.           ConsoleDevice = io.io_Device;
  137.           if (ri = get_render_info(NULL, RENDER_INFO_FLAGS)) {
  138.              if (win = open_window(ri, &test_new_window,
  139.                                OPEN_WINDOW_FLAGS)) {
  140.             if (gl = create_gadgets(ri, &test_gadget_data[0], 0, 0,
  141.                                     NULL)) {
  142.                display_gadgets(win, gl);
  143.                test_action(ri, win, gl);
  144.                remove_gadgets(gl);
  145.                free_gadgets(gl);
  146.             }
  147.             close_window(win, FALSE);
  148.              }
  149.              free_render_info(ri);
  150.           }
  151.           CloseDevice((struct IORequest *)&io);
  152.            }
  153.            CloseLibrary(LayersBase);
  154.         }
  155.         CloseLibrary(DiskfontBase);
  156.      }
  157.      CloseLibrary(GfxBase);
  158.       }
  159.       CloseLibrary(IntuitionBase);
  160.    }
  161.    MWTerm();
  162.    return(0L);
  163. }
  164.     /* Perform IDCMP action */
  165.  
  166.    VOID
  167. test_action(struct RenderInfo  *ri, struct Window  *win,
  168.                              struct GadgetList  *gl)
  169. {
  170.    struct MsgPort  *up = win->UserPort;
  171.    BOOL busy = FALSE, keepon = TRUE;
  172.  
  173.    do {
  174.       struct IntuiMessage  *msg;
  175.  
  176.       WaitPort(up);
  177.       while (msg = (struct IntuiMessage *)get_msg(up)) {
  178.      switch (msg->Class) {
  179.         case CLOSEWINDOW :
  180.            keepon = FALSE;
  181.            break;
  182.  
  183.         case ISUP_ID :
  184.            switch (msg->Code) {
  185.           case TEST_GADGET_MOVE_POINTER :
  186.              move_mouse_pointer(win, CLOSE_GADGET_X, CLOSE_GADGET_Y,
  187.                                      FALSE);
  188.              break;
  189.  
  190.           case TEST_GADGET_BUSY_POINTER :
  191.              if (busy == FALSE) {
  192.             change_mouse_pointer(win, NULL, FALSE);
  193.             busy = TRUE;
  194.              } else {
  195.             restore_mouse_pointer(win);
  196.             busy = FALSE;
  197.              }
  198.              break;
  199.            }
  200.            break;
  201.      }
  202.      reply_msg(msg);
  203.       }
  204.    } while (keepon == TRUE);
  205.    if (busy == TRUE) {
  206.       restore_mouse_pointer(win);
  207.    }
  208. }
  209.